"""
gtest.assertions 模块实现

提供断言函数的实际实现，用于 IDE 类型检查和 MCPy 编译器。

@mcpy_headers: <gtest/gtest.h>
@mcpy_module: gtest.assertions
"""

from typing import TypeVar

T = TypeVar("T")


# 致命断言（失败时终止测试）
# @mcpy_macro: True
def ASSERT_TRUE(condition: bool) -> None:
    """断言条件为真，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_FALSE(condition: bool) -> None:
    """断言条件为假，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_EQ(val1: T, val2: T) -> None:
    """断言两个值相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_NE(val1: T, val2: T) -> None:
    """断言两个值不相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_LT(val1: T, val2: T) -> None:
    """断言第一个值小于第二个值，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_LE(val1: T, val2: T) -> None:
    """断言第一个值小于等于第二个值，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_GT(val1: T, val2: T) -> None:
    """断言第一个值大于第二个值，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_GE(val1: T, val2: T) -> None:
    """断言第一个值大于等于第二个值，失败时终止测试"""
    ...


# 非致命断言（失败时继续测试）
# @mcpy_macro: True
def EXPECT_TRUE(condition: bool) -> None:
    """期望条件为真，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_FALSE(condition: bool) -> None:
    """期望条件为假，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_EQ(val1: T, val2: T) -> None:
    """期望两个值相等，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_NE(val1: T, val2: T) -> None:
    """期望两个值不相等，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_LT(val1: T, val2: T) -> None:
    """期望第一个值小于第二个值，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_LE(val1: T, val2: T) -> None:
    """期望第一个值小于等于第二个值，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_GT(val1: T, val2: T) -> None:
    """期望第一个值大于第二个值，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_GE(val1: T, val2: T) -> None:
    """期望第一个值大于等于第二个值，失败时继续测试"""
    ...


# 字符串断言
# @mcpy_macro: True
def ASSERT_STREQ(str1: str, str2: str) -> None:
    """断言两个字符串相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_STRNE(str1: str, str2: str) -> None:
    """断言两个字符串不相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_STRCASEEQ(str1: str, str2: str) -> None:
    """断言两个字符串忽略大小写相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_STRCASENE(str1: str, str2: str) -> None:
    """断言两个字符串忽略大小写不相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def EXPECT_STREQ(str1: str, str2: str) -> None:
    """期望两个字符串相等，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_STRNE(str1: str, str2: str) -> None:
    """期望两个字符串不相等，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_STRCASEEQ(str1: str, str2: str) -> None:
    """期望两个字符串忽略大小写相等，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_STRCASENE(str1: str, str2: str) -> None:
    """期望两个字符串忽略大小写不相等，失败时继续测试"""
    ...


# 浮点数断言
# @mcpy_macro: True
def ASSERT_FLOAT_EQ(val1: float, val2: float) -> None:
    """断言两个浮点数相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_DOUBLE_EQ(val1: float, val2: float) -> None:
    """断言两个双精度浮点数相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def ASSERT_NEAR(val1: float, val2: float, abs_error: float) -> None:
    """断言两个浮点数在误差范围内相等，失败时终止测试"""
    ...


# @mcpy_macro: True
def EXPECT_FLOAT_EQ(val1: float, val2: float) -> None:
    """期望两个浮点数相等，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_DOUBLE_EQ(val1: float, val2: float) -> None:
    """期望两个双精度浮点数相等，失败时继续测试"""
    ...


# @mcpy_macro: True
def EXPECT_NEAR(val1: float, val2: float, abs_error: float) -> None:
    """期望两个浮点数在误差范围内相等，失败时继续测试"""
    ...


# 异常断言
# @mcpy_macro: True
def ASSERT_THROW(statement: Any, exception_type: type) -> None:
    """断言语句抛出指定类型的异常，失败时终止测试"""
    ...


# @mcpy_macro: True
def EXPECT_THROW(statement: Any, exception_type: type) -> None:
    """期望语句抛出指定类型的异常，失败时继续测试"""
    ...
